home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / HTML / Common.php < prev    next >
PHP Script  |  2004-03-24  |  12KB  |  419 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Author: Adam Daniel <adaniel1@eesus.jnj.com>                         |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: Common.php,v 1.8 2003/06/19 18:52:50 mansion Exp $
  20.  
  21. /**
  22.  * Base class for all HTML classes
  23.  *
  24.  * @author      Adam Daniel <adaniel1@eesus.jnj.com>
  25.  * @version     1.7
  26.  * @since       PHP 4.0.3pl1
  27.  * @abstract
  28.  */
  29. class HTML_Common {
  30.  
  31.     /**
  32.      * Associative array of table attributes
  33.      * @var     array
  34.      * @access  private
  35.      */
  36.     var $_attributes = array();
  37.  
  38.     /**
  39.      * Tab offset of the table
  40.      * @var     int
  41.      * @access  private
  42.      */
  43.     var $_tabOffset = 0;
  44.  
  45.     /**
  46.      * Tab string
  47.      * @var       string
  48.      * @since     1.7
  49.      * @access    private
  50.      */
  51.     var $_tab = "\11";
  52.  
  53.     /**
  54.      * Contains the line end string
  55.      * @var       string
  56.      * @since     1.7
  57.      * @access    private
  58.      */
  59.     var $_lineEnd = "\12";
  60.  
  61.     /**
  62.      * HTML comment on the object
  63.      * @var       string
  64.      * @since     1.5
  65.      * @access    private
  66.      */
  67.     var $_comment = '';
  68.  
  69.     /**
  70.      * Class constructor
  71.      * @param    mixed   $attributes     Associative array of table tag attributes 
  72.      *                                   or HTML attributes name="value" pairs
  73.      * @param    int     $tabOffset      Indent offset in tabs
  74.      * @access   public
  75.      */
  76.     function HTML_Common($attributes = null, $tabOffset = 0)
  77.     {
  78.         $this->setAttributes($attributes);
  79.         $this->setTabOffset($tabOffset);
  80.     } // end constructor
  81.  
  82.     /**
  83.      * Returns the current API version
  84.      * @access   public
  85.      * @returns  double
  86.      */
  87.     function apiVersion()
  88.     {
  89.         return 1.7;
  90.     } // end func apiVersion
  91.  
  92.     /**
  93.      * Returns the lineEnd
  94.      * 
  95.      * @since     1.7
  96.      * @access    private
  97.      * @return    string
  98.      * @throws
  99.      */
  100.     function _getLineEnd()
  101.     {
  102.         return $this->_lineEnd;
  103.     } // end func getLineEnd
  104.  
  105.     /**
  106.      * Returns a string containing the unit for indenting HTML
  107.      * 
  108.      * @since     1.7
  109.      * @access    private
  110.      * @return    string
  111.      */
  112.     function _getTab()
  113.     {
  114.         return $this->_tab;
  115.     } // end func _getTab
  116.  
  117.     /**
  118.      * Returns a string containing the offset for the whole HTML code
  119.      * 
  120.      * @return    string
  121.      * @access   private
  122.      */
  123.     function _getTabs()
  124.     {
  125.         return str_repeat($this->_getTab(), $this->_tabOffset);
  126.     } // end func _getTabs
  127.  
  128.     /**
  129.      * Returns an HTML formatted attribute string
  130.      * @param    array   $attributes
  131.      * @return   string
  132.      * @access   private
  133.      */
  134.     function _getAttrString($attributes)
  135.     {
  136.         $strAttr = '';
  137.  
  138.         if (is_array($attributes)) {
  139.             foreach ($attributes as $key => $value) {
  140.                 $strAttr .= ' ' . $key . '="' . htmlspecialchars($value) . '"';
  141.             }
  142.         }
  143.         return $strAttr;
  144.     } // end func _getAttrString
  145.  
  146.     /**
  147.      * Returns a valid atrributes array from either a string or array
  148.      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
  149.      * @access   private
  150.      */
  151.     function _parseAttributes($attributes)
  152.     {
  153.         if (is_array($attributes)) {
  154.             $ret = array();
  155.             foreach ($attributes as $key => $value) {
  156.                 if (is_int($key)) {
  157.                     $key = $value = strtolower($value);
  158.                 } else {
  159.                     $key = strtolower($key);
  160.                 }
  161.                 $ret[$key] = $value;
  162.             }
  163.             return $ret;
  164.  
  165.         } elseif (is_string($attributes)) {
  166.             $preg = "/(([A-Za-z_:]|[^\\x00-\\x7F])([A-Za-z0-9_:.-]|[^\\x00-\\x7F])*)" .
  167.                 "([ \\n\\t\\r]+)?(=([ \\n\\t\\r]+)?(\"[^\"]*\"|'[^']*'|[^ \\n\\t\\r]*))?/";
  168.             if (preg_match_all($preg, $attributes, $regs)) {
  169.                 for ($counter=0; $counter<count($regs[1]); $counter++) {
  170.                     $name  = $regs[1][$counter];
  171.                     $check = $regs[0][$counter];
  172.                     $value = $regs[7][$counter];
  173.                     if (trim($name) == trim($check)) {
  174.                         $arrAttr[strtolower(trim($name))] = strtolower(trim($name));
  175.                     } else {
  176.                         if (substr($value, 0, 1) == "\"" || substr($value, 0, 1) == "'") {
  177.                             $value = substr($value, 1, -1);
  178.                         }
  179.                         $arrAttr[strtolower(trim($name))] = trim($value);
  180.                     }
  181.                 }
  182.                 return $arrAttr;
  183.             }
  184.         }
  185.     } // end func _parseAttributes
  186.  
  187.     /**
  188.      * Returns the array key for the given non-name-value pair attribute
  189.      * 
  190.      * @param     string    $attr         Attribute
  191.      * @param     array     $attributes   Array of attribute
  192.      * @since     1.0
  193.      * @access    private
  194.      * @return    array key
  195.      * @throws
  196.      */
  197.     function _getAttrKey($attr, $attributes)
  198.     {
  199.         if (isset($attributes[strtolower($attr)])) {
  200.             return true;
  201.         } else {
  202.             return null;
  203.         }
  204.     } //end func _getAttrKey
  205.  
  206.     /**
  207.      * Updates the attributes in $attr1 with the values in $attr2 without changing the other existing attributes
  208.      * @param    array   $attr1      Original attributes array
  209.      * @param    array   $attr2      New attributes array
  210.      * @access   private
  211.      * @return   array
  212.      */
  213.     function _updateAttrArray(&$attr1, $attr2)
  214.     {
  215.         if (!is_array($attr2)) {
  216.             return false;
  217.         }
  218.         foreach ($attr2 as $key => $value) {
  219.             $attr1[$key] = $value;
  220.         }
  221.     } // end func _updateAtrrArray
  222.  
  223.     /**
  224.      * Removes the given attribute from the given array
  225.      * 
  226.      * @param     string    $attr           Attribute name
  227.      * @param     array     $attributes     Attribute array
  228.      * @since     1.4
  229.      * @access    public
  230.      * @return    void
  231.      * @throws
  232.      */
  233.     function _removeAttr($attr, &$attributes)
  234.     {
  235.         $attr = strtolower($attr);
  236.         if (isset($attributes[$attr])) {
  237.             unset($attributes[$attr]);
  238.         }
  239.     } //end func _removeAttr
  240.  
  241.     /**
  242.      * Returns the value of the given attribute
  243.      * 
  244.      * @param     string    $attr   Attribute name
  245.      * @since     1.5
  246.      * @access    public
  247.      * @return    void
  248.      * @throws
  249.      */
  250.     function getAttribute($attr)
  251.     {
  252.         $attr = strtolower($attr);
  253.         if (isset($this->_attributes[$attr])) {
  254.             return $this->_attributes[$attr];
  255.         }
  256.         return null;
  257.     } //end func getAttribute
  258.  
  259.     /**
  260.      * Sets the HTML attributes
  261.      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
  262.      * @access   public
  263.      */
  264.     function setAttributes($attributes)
  265.     {
  266.         $this->_attributes = $this->_parseAttributes($attributes);
  267.     } // end func setAttributes
  268.  
  269.     /**
  270.      * Returns the assoc array (default) or string of attributes
  271.      *
  272.      * @param     bool    Whether to return the attributes as string 
  273.      * @since     1.6
  274.      * @access    public
  275.      * @return    mixed   attributes
  276.      */
  277.     function getAttributes($asString = false)
  278.     {
  279.         if ($asString) {
  280.             return $this->_getAttrString($this->_attributes);
  281.         } else {
  282.             return $this->_attributes;
  283.         }
  284.     } //end func getAttributes
  285.  
  286.     /**
  287.      * Updates the passed attributes without changing the other existing attributes
  288.      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
  289.      * @access   public
  290.      */
  291.     function updateAttributes($attributes)
  292.     {
  293.         $this->_updateAttrArray($this->_attributes, $this->_parseAttributes($attributes));
  294.     } // end func updateAttributes
  295.  
  296.     /**
  297.      * Removes an attribute
  298.      * 
  299.      * @param     string    $attr   Attribute name
  300.      * @since     1.4
  301.      * @access    public
  302.      * @return    void
  303.      * @throws
  304.      */
  305.     function removeAttribute($attr)
  306.     {
  307.         $this->_removeAttr($attr, $this->_attributes);
  308.     } //end func removeAttribute
  309.  
  310.     /**
  311.      * Sets the line end style to Windows, Mac, Unix or a custom string.
  312.      * 
  313.      * @param   string  $style  "win", "mac", "unix" or custom string.
  314.      * @since   1.7
  315.      * @access  public
  316.      * @return  void
  317.      */
  318.     function setLineEnd($style)
  319.     {
  320.         switch ($style) {
  321.             case 'win':
  322.                 $this->_lineEnd = "\15\12";
  323.                 break;
  324.             case 'unix':
  325.                 $this->_lineEnd = "\12";
  326.                 break;
  327.             case 'mac';
  328.                 $this->_lineEnd = "\15";
  329.                 break;
  330.             default:
  331.                 $this->_lineEnd = $style;
  332.         }
  333.     } // end func setLineEnd
  334.  
  335.     /**
  336.      * Sets the tab offset
  337.      *
  338.      * @param    int     $offset
  339.      * @access   public
  340.      */
  341.     function setTabOffset($offset)
  342.     {
  343.         $this->_tabOffset = $offset;
  344.     } // end func setTabOffset
  345.  
  346.     /**
  347.      * Returns the tabOffset
  348.      * 
  349.      * @since     1.5
  350.      * @access    public
  351.      * @return    int
  352.      */
  353.     function getTabOffset()
  354.     {
  355.         return $this->_tabOffset;
  356.     } //end func getTabOffset
  357.  
  358.     /**
  359.      * Sets the string used to indent HTML
  360.      * 
  361.      * @since     1.7
  362.      * @param     string    $string     String used to indent ("\11", "\t", '  ', etc.).
  363.      * @access    public
  364.      * @return    void
  365.      */
  366.     function setTab($string)
  367.     {
  368.         $this->_tab = $string;
  369.     } // end func setTab
  370.  
  371.     /**
  372.      * Sets the HTML comment to be displayed at the beginning of the HTML string
  373.      *
  374.      * @param     string
  375.      * @since     1.4
  376.      * @access    public
  377.      * @return    void
  378.      */
  379.     function setComment($comment)
  380.     {
  381.         $this->_comment = $comment;
  382.     } // end func setHtmlComment
  383.  
  384.     /**
  385.      * Returns the HTML comment
  386.      * 
  387.      * @since     1.5
  388.      * @access    public
  389.      * @return    string
  390.      */
  391.     function getComment()
  392.     {
  393.         return $this->_comment;
  394.     } //end func getComment
  395.  
  396.     /**
  397.      * Abstract method.  Must be extended to return the objects HTML
  398.      *
  399.      * @access    public
  400.      * @return    string
  401.      * @abstract
  402.      */
  403.     function toHtml()
  404.     {
  405.         return '';
  406.     } // end func toHtml
  407.  
  408.     /**
  409.      * Displays the HTML to the screen
  410.      *
  411.      * @access    public
  412.      */
  413.     function display()
  414.     {
  415.         print $this->toHtml();
  416.     } // end func display
  417.  
  418. } // end class HTML_Common
  419. ?>